/*PGBD - T2_3 
Otávio Cassel
Raphael Miollo
Leonardo Steffenello*/

package Model;

import java.util.ArrayList;

public class Dado {

    private static int quantidade;
    private static ArrayList<String> dados = new ArrayList<>();
    private static ArrayList<String> aguardando = new ArrayList<>();
    private static ArrayList<String> bloqueioCompartilhado = new ArrayList<>();
    private static ArrayList<String> bloqueioExclusivo = new ArrayList<>();
    
    public static void Dado(int quantidade) {
        limpaClasse();
        Dado.quantidade = quantidade;
        Dado.dados = geraDados(quantidade);
        Dado.aguardando = inicioAguardo();
        for (int i = 0; i < Dado.quantidade; i++) {
            Dado.bloqueioExclusivo.add("0");
            Dado.bloqueioCompartilhado.add("0");
        }
    }

    private static ArrayList geraDados(int quantidade) {
        ArrayList<String> array = new ArrayList<>();
        if (quantidade == 1) {
            array.add("A");
        } else if (quantidade == 2) {
            array.add("A");
            array.add("B");
        } else if (quantidade == 3) {
            array.add("A");
            array.add("B");
            array.add("C");
        } else if (quantidade == 4) {
            array.add("A");
            array.add("B");
            array.add("C");
            array.add("D");
        }
        return array;
    }
    
    private static ArrayList inicioAguardo(){
        ArrayList<String> array = new ArrayList<>();
        array.add(" ");
        array.add(" ");
        return array;
    }
    
    private static void limpaClasse() {
        Dado.dados.clear();
        Dado.aguardando.clear();
        Dado.bloqueioExclusivo.clear();
        Dado.bloqueioCompartilhado.clear();
    }

    public static String getAguardando(int key) {
        return Dado.aguardando.get(key);
    }

    public static void setAguardando(int key, String value) {
        Dado.aguardando.set(key, value);
    }
    
    public static String getBloqueioCompartilhado(String dado) {
        int key = buscaIndice(dado);
        return Dado.bloqueioCompartilhado.get(key);
    }

    public static void setBloqueioCompartilhado(String dado, String value) {
        int key = buscaIndice(dado);
        Dado.bloqueioCompartilhado.set(key, value);
    }

    public static String getBloqueioExclusivo(String dado) {
        int key = buscaIndice(dado);
        return Dado.bloqueioExclusivo.get(key);
    }

    public static void setBloqueioExclusivo(String dado, String value) {
        int key = buscaIndice(dado);
        Dado.bloqueioExclusivo.set(key, value);
    }

    public static ArrayList<String> getDados() {
        return Dado.dados;
    }
    
    
    private static int buscaIndice(String dado) {
        int indice = 0;
        for (int i = 0; i < Dado.quantidade; i++) {
            if (Dado.dados.get(i).equals(dado)) {
                indice = i;
                break;
            }
        }
        return indice;
    }
    
}   
